package user32

import (
	"unsafe"

	"gitee.com/kitfast/win32/a"
	"gitee.com/kitfast/win32/h"
)

// 将消息调度到窗口过程。 它通常用于调度 GetMessage 函数检索到的消息。
//
// LRESULT DispatchMessage(
//
//	[in] const MSG *lpMsg
//
// );
func DispatchMessage(msg *h.MSG) uintptr {
	return a.R1(dispatchMessage, uintptr(unsafe.Pointer(msg)))
}

// 从调用线程的消息队列中检索消息。 函数调度传入的已发送消息，直到已发布的消息可供检索。
//
// BOOL GetMessage(
//
//	[out]          LPMSG lpMsg,
//	[in, optional] HWND  hWnd,
//	[in]           UINT  wMsgFilterMin,
//	[in]           UINT  wMsgFilterMax
//
// );
func GetMessage(msg *h.MSG, hWnd h.HWND, min, max uint32) bool {
	return a.R1B(getMessageW, uintptr(unsafe.Pointer(msg)), uintptr(hWnd), uintptr(min), uintptr(max))
}

// 同步 消息发送到一个或多个窗口。
//
// RESULT SendMessageW(
//
//	[in] HWND   hWnd,
//	[in] UINT   Msg,
//	[in] WPARAM wParam,
//	[in] LPARAM lParam
//
// );
func SendMessage(hWnd h.HWND, msg uint32, wParam, lParam uintptr) uintptr {
	return a.R1(sendMessageW, hWnd.P(), uintptr(msg), wParam, lParam)
}

// 将虚拟密钥消息转换为字符消息。
// 字符消息将发布到调用线程的消息队列，以便下次线程调用 GetMessage 或 PeekMessage 函数时读取。
//
// BOOL TranslateMessage(
//
//	[in] const MSG *lpMsg
//
// );
func TranslateMessage(msg *h.MSG) bool {
	return a.R1B(translateMessage, uintptr(unsafe.Pointer(msg)))
}
